package com.own.component.elastic.service;

import co.elastic.clients.elasticsearch._types.mapping.Property;
import com.own.component.common.base.entity.po.BaseBean;
import com.own.component.elastic.entity.BaseElasticPo;

import java.util.Map;

/**
 * BaseElasticAdvancedIndexService
 *
 * @author chenxueli
 * @date 2021-08-27 10:31:00
 */
public interface BaseElasticAdvancedIndexService<
        PO extends BaseBean,
        ELASTIC_PO extends BaseElasticPo<PO>
        > {

    /**
     * 创建相关索引
     *
     * @param po 数据
     */
    void createIndex(ELASTIC_PO po);

    /**
     * 删除相关索引
     *
     * @param po 数据
     */
    void deleteIndex(ELASTIC_PO po);

    /**
     * 验证相关索引
     *
     * @param po 数据
     * @return 是否存在
     */
    boolean checkIndex(ELASTIC_PO po);

    /**
     * 修改数据时候的索引
     *
     * @param po 数据
     * @return 索引
     */
    String updateIndex(ELASTIC_PO po);

    /**
     * 搜索数据时候的索引
     *
     * @return 索引
     */
    default String searchIndex() {
        return searchIndex(null);
    }

    /**
     * 搜索数据时候的索引
     *
     * @param po 数据
     * @return 索引
     */
    String searchIndex(ELASTIC_PO po);

    /**
     * 获取索引映射
     *
     * @return 索引映射
     */
    Map<String, Property> mapping();

}
